package com.sc.nft.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.dto.AddActivityPropsConfDTO;
import com.sc.nft.entity.vo.ActivityPropsDetailVO;
import com.sc.nft.entity.vo.ActivityPropsExchangeDetailVO;
import com.sc.nft.entity.vo.ActivityPropsUpVO;
import com.sc.nft.entity.vo.ActivityPropsVO;
import com.sc.nft.enums.BoxTakePoolConvertScenarioEnum;

import java.util.Date;
import java.util.List;

public interface ActivityPropsService {

    /**
     * 新增活动道具卡
     *
     * @param equityPropsId
     * @param sumCount
     * @param creationContent
     * @param relationId
     * @param relationName
     * @param confList
     */
    void addActivityProps(Long equityPropsId, Integer sumCount, String creationContent, Long relationId, String relationName, List<AddActivityPropsConfDTO> confList, Integer upperLimit, Boolean isRegisterTime, Date registerBeginTime, Date registerEndTime, BoxTakePoolConvertScenarioEnum convertScenario, Long daoId);

    /**
     * 更新活动道具卡
     *
     * @param id
     * @param relationId
     * @param relationName
     * @param confList
     */
    void updateActivityProps(Long id, Long relationId, String relationName, List<AddActivityPropsConfDTO> confList, Integer upperLimit, Boolean isRegisterTime, Date registerBeginTime, Date registerEndTime, Long daoId);

    /**
     * 删除活动道具卡
     *
     * @param id
     */
    void deleteActivityProps(Long id);

    /**
     * 后台分页显示活动道具
     *
     * @param firstTitle
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<ActivityPropsVO> adminPage(Boolean status, String firstTitle, BoxTakePoolConvertScenarioEnum convertScenario, Long daoId, Integer pageNo, Integer pageSize);

    /**
     * 根据id获取活动道具卡详情
     *
     * @param id
     * @return
     */
    ActivityPropsDetailVO getActivityPropsById(Long id);

    /**
     * 获取所有上架道具卡
     *
     * @return
     */
    Page<ActivityPropsUpVO> getUpActivityPropsList(BoxTakePoolConvertScenarioEnum convertScenario, Long daoId, Integer pageNo, Integer pageSize);

    /**
     * 获取道具卡详情
     *
     * @param id
     * @return
     */
    ActivityPropsExchangeDetailVO getActivityPropsDetail(Long id);

    /**
     * 兑换道具卡
     *
     * @param id
     * @param num
     */
    void exchange(Long id, Integer num);

    /**
     * 上下架道具卡
     *
     * @param id
     * @param status
     */
    void updateStatus(Long id, Boolean status);

    /**
     * 修改排序
     *
     * @param id
     * @param sort
     */
    void updateSort(Long id, Integer sort);

    /**
     * 修改剩余库存
     *
     * @param id
     * @param count
     */
    void updateUsableCount(Long id, Integer count);
}
